9
תגובות

סטטי.

פתח mtndiv ,
מה זה סטטי? למה זה נועד? איזה פונקציות לדוגמא אמורות להיות סטטיות? תודה.
אני מאז ומתמיד משתמש בזה, אני יודע בערך למה זה נועד, אבל לא במדויק. אשמח להסבר, תודה רבה.

9 תשובות

avatar ענה OrelBeY ב 02 לפברואר 2013 #

מתודה סטטית זו מתודה שלא קשורה למופע של מחלקה. כך למשל מתודה של חיפוש משתמשים בבסיס הנתונים תהיה סטטית (כי היא לא קשורה למופע מסוים של המחלקה).
אותו רעיון חל על משתנה סטטי בפונקציה. הוא לא קשור לקריאה מסוימת של הפונקציה, אלא לפונקציה באופן כללי. (הוא משותף לכל הקריאות לפונקציה.) כך תוכל, למשל, לספור כמה פעמים קראו לפונקציה.

function foo()
{
    static $callsCount = 0;
    return ++$callsCount;
}

$count = foo();
$count = foo();
echo $count; // prints 2

avatar ענה intval ב 02 לפברואר 2013 #

אף פונקציה לא אמורה להיות סטטית. וכמה שיותר תצמד לכלל הזה, ככה הקוד שלך יהיה טוב יותר.

avatar ענה Ben ב 02 לפברואר 2013 #

למה הפונקציות לא צריכות להיות סטטיות ? מה החיסרון בזה ?

avatar ענה mtndiv ב 02 לפברואר 2013 #

תודה לתגובה הראשונה, ואלכס, התכוונתי למתודות סטטיות במחלקה, אתה מתכוון שעדיף לא להשתמש במתודות סטטיות במחלקה?

avatar ענה intval ב 02 לפברואר 2013 #

בדיוק.
אם יש לך מטודה סטטית זה כנראה אומר שהיא לא אמורה להיות במחלקה.

avatar ענה OrelBeY ב 02 לפברואר 2013 #

מה עם הדוגמה שנתתי למעלה, אלכס? אני לא הולך ליצור מחלקה נפרדת של פעולות שונות של User שלא קשורות למופע מסוים של מחלקה.

avatar ענה mtndiv ב 02 לפברואר 2013 #

אלכס מה תגיד על המחלקה הזאת ? שהיא לא טובה לדעתך ?
http://pastebin.com/gV7kkyfr
אני משער שבשביל לקבל מידע על סשן מסוים לא צריך לקבוע מופע חדש, אלא עדיף לקבל ע"י מטודה סטטית.
בוא תסביר לי פה את הטעות ואיך לתקן אותה. תודה.

avatar ענה OrelBeY ב 02 לפברואר 2013 #

בשביל דבר כזה אני אישית דווקא לא הייתי משתמש בסטטי. init() היה בבנאי שלי, ו-destroy() היה בדיסטרקטור שלי.

עריכה:
צודק, זה צריך להיות סינגלטון.

avatar ענה Michael ב 02 לפברואר 2013 #

אתה באותה מידה יכול לעשות ככה: http://phpassist.com/7e982#4